/**
 * Clase para filtrar las localidades
 */ 
 qx.Class.define("mutual.filterLocalidades", {
			extend : mutual.filter,
			/** 
			 * @param (int) maxDisplay: Máximo nº de registros a sugerir en la búsqueda
			 * @param (delegate) fnSelected: Puntero a la función ejecute luego de cambiar el contenido de la búsqueda
			 */
			construct : function(maxDisplay, fnSelected) {
				this.fnSelected = fnSelected;
				this.base(arguments);
				this.setLayout(new qx.ui.layout.HBox(5));
				
				// cargamos el json con los datos  a proponer
				this.json = new Array(); 
				var localidades = this.getLocalidades();
				for (var i=0; i < localidades.length; i++){
					this.json[i] = {
								idLocalidad: parseInt(localidades[i].id_localidad),
								descripcion: localidades[i].nombre_localidad + " - " + localidades[i].nombre_departamento
							  };
				}
				// instanciamos el combo y le definimos la función que ejecutará cuando se dispare el evento 'input' de su textfield
				this.combo = new qx.ui.form.ComboBox();
				this.combo.setWidth(250);
				this.combo.getChildControl("textfield").addListener("input",
						function(e) {
							this.combo.getChildControl("list").removeAll();

							if (e.getData() !== "") {
								var find = new RegExp(e.getData(), "i");
								var j = 0;
								for (i = 0; i < this.json.length; i++) {
									if ((this.json[i].idLocalidad.toString().search(find) != -1) || // Busca el id de localidad
										(this.json[i].descripcion.toString().search(find) != -1)) { // Busca en la descripción
										this.combo.add(new qx.ui.form.ListItem(
												this.json[i].descripcion, "",
												this.json[i].idLocalidad));
										j++;
									}
									if (j == maxDisplay)
										break;
								}
								this.combo.open();
								find = null;
							}
						}, this);
				
				// seteamos el puntero a la función que ejecutará cuando cambie el contenido de la búsqueda
				this.combo.addListener("changeValue", function(e){
					if (this.fnSelected)
						this.fnSelected();
				}, this)
				
				// Instanciamos el botón que disparará el abm de loalidades
				var btnAbm = new qx.ui.form.Button("", "mutual/newPlan.png").set({width: 17});
				btnAbm.addListener("execute", function(){
//					alert("se abre el abm de localidades");
					var win = new qx.ui.window.Window("ABM de Localidades");
					win.set({showMaximize:false, allowMaximize:false, showMinimize:false, showClose:true, modal:true, movable:false, resizable:false, showStatusbar:false});
					win.setLayout(new qx.ui.layout.VBox(2));
					win.add(mutual.maestros.getABMLocalidades());
					win.addListener("close", this.getLocalidades, this);
					win.open();
					win.center();
				}, this);
				
				// Agregamos el combo y el botón de actualización
				this.add(this.combo);
				this.add(btnAbm);
			},
			
			members : {
				/**
				 * Obtiene un array con las localidades solicitadas al server
				 * 
				 * @return (Array) localidades
				 */
				getLocalidades : function() {
					var rpc = new qx.io.remote.Rpc("services/", "mutual.Persona");
					var localidades = rpc.callSync("getLocalidades");
					return localidades;
				},
				/**
				 * Muestra en el combo la localidad especificada 
				 * 
				 * @param (int) idLocalidad: Id de localidad que se desea mostrar en el combo
				 */
				setLocalidad : function(idLocalidad){
					 if (idLocalidad) {
		                for(var i in this.json) { 
		                    if (this.json[i].idLocalidad === idLocalidad) {
		                        this.combo.getChildControl("list").removeAll(); 
		                        this.combo.add(new qx.ui.form.ListItem(this.json[i].descripcion, "", this.json[i].idLocalidad)); 
		                        break; 
		                    }
		                }
		                this.combo.getChildControl("list").setModelSelection([idLocalidad]);
		            } else {
		                this.combo.getChildControl("textfield").setValue(idLocalidad);
		                this.combo.getChildControl("list").resetSelection();
		            }
				},
				/**
				 * Obtiene la localidad especificada
				 * 
				 * @param (int) idLocalidad: Id de localidad que se desea recuperar
				 * 
				 * @return (json object) localidad
				 */				
				getLocalidad : function (idLocalidad){
					var rpc = new qx.io.remote.Rpc("services/", "mutual.Persona");
					var localidad = rpc.callSync("getLocalidad", idLocalidad);
					return localidad;
				}
			}
});
